#include "LinkList_Queue.h"




//enum Status{OK=1,ERROR=-2,TRUE=1,FALSE=0,EMPTY=-1,OVERFLOW=-3};
//typedef enum Status Status;
//
//typedef int SElemType;  //自定义元素类型
//
//typedef struct {
//
//    SElemType *Head;    //在队列构造之前和销毁之后，base的值为NULL
//    SElemType *Tail;     //队头指针
//    int QueueSize;      //当前已分配的存储空间，以元素为单位
//}SqQueue;
//
//Status InitQueue(SqQueue *S);   //构造一个空队
//Status DestroyQueue(SqQueue *S);    //销毁队S，S不再存在
//Status ClearQueue(SqQueue *S);  //把S置为空队
//Status QueueEmpty(SqQueue S);   //若S为空队返回TRUE，否则返回FALSE
//int QueueLength(SqQueue S);     //返回S的元素个数，即队的长度
//SElemType* GetHead(SqQueue S);  //若队不空，则返回队头元素，否则返回NULL
//Status EnQueue(SqQueue *S,SElemType e);    //插入元素e为
//SElemType DeQueue(SqQueue *S);  //若队不空，则删除队头元素并返回，否则返回
//Status QueueTraverse(SqQueue S,Status (*visit)(SElemType));     //从栈底到栈顶一次对队中每个元素调用函数visit（），一旦visit（）失败，则返回ERROR

Status visit(SElemType e);

int main() {

    LinkQueue S;
    InitQueue(&S);

    for (int i = 0; i < 5; ++i) {
        SElemType e=i+1;
        EnQueue(&S,e);
    }

    printf("Traverse:\t");
    QueueTraverse(S,visit);
    printf("\n");

//    DestroyQueue(&S);


//    ClearQueue(&S);


//    if(QueueEmpty(S))
//        printf("\nQueue is Empty!\n");
//    else
//        printf("\nQueue isn't Empty!\n");


//    printf("\nStackSize:%d\tStackLength:%d\n",S.QueueSize, QueueLength(S));
//
//
//    printf("\nHeadElem:%d\n", GetHead(S));

//
//    printf("\nPopElem:%d\n", DeQueue(&S));



    printf("Traverse:\t");
    QueueTraverse(S,visit);
    printf("\n");

    return 0;
}

Status visit(SElemType e){

    printf("%d\t",e);
    return OK;
}